package csu.fun.spring_store.persistence;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import csu.fun.spring_store.domain.Signon;
import org.springframework.stereotype.Repository;

@Repository
public interface SignonMapper extends BaseMapper<Signon> {

    //判断密码是否正确
    default boolean isPasswordCorrect(String username, String password) {
        Signon signon = this.selectById(username);
        if (signon != null) {
            return signon.getPassword().equals(password);
        }
        return false;
    }

    //返回指定id的用户密码
    default String getPasswordByUsername(String username) {
        Signon signon = this.selectById(username);
        if (signon != null) {
            return signon.getPassword();
        }
        return null;
    }

    //插入一个新signon记录，返回实际操作的行数。signon不为null且username必须不在signon表中存在，否则不进行任何修改
    default int setNewSignon(Signon signon) {
        if (signon == null) {
            return 0;
        }
        QueryWrapper<Signon> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", signon.getUsername());
        if (!this.exists(queryWrapper)) {
            return this.insert(signon);
        }
        return 0;
    }

    //根据用户名和密码新建一个signon记录，返回实际操作的行数。username不能为空，否则不进行任何修改
    default int setNewSignonByUsernameAndPassword(String username, String password) {
        if (username == null || username.equals("") || username.isEmpty()) {
            return 0;
        }
        Signon signon = new Signon();
        signon.setUsername(username);
        signon.setPassword(password);
        return this.setNewSignon(signon);
    }

    //修改指定用户的密码，返回实际修改的行数。username必须已经在表中存在，否则不进行任何修改
    default int setPasswordByUsername(String username, String password) {
        Signon signon = this.selectById(username);
        if (signon != null) {
            signon.setPassword(password);
            return this.updateById(signon);
        }
        return 0;
    }

    //删除指定用户信息，返回实际修改的行数
    default int removeSignonByUsername(String username) {
        return this.deleteById(username);
    }

}
